package com.demon.net.json

import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
import com.google.gson.JsonParseException
import java.lang.reflect.ParameterizedType
import java.lang.reflect.Type
import java.util.*

/**
 * author : Android 轮子哥
 * github : https://github.com/getActivity/EasyHttp
 * time   : 2020/05/05
 * desc   : List 类型解析适配器
 */
class ListTypeAdapter : JsonDeserializer<List<*>?> {
    @Throws(JsonParseException::class)
    override fun deserialize(
        json: JsonElement,
        typeOfT: Type,
        context: JsonDeserializationContext
    ): List<*>? {
        // 如果这是一个数组
        return if (json.isJsonArray) {
            val array = json.asJsonArray
            // 获取 List 上的泛型
            val itemType = (typeOfT as ParameterizedType).actualTypeArguments[0]
            val list: MutableList<Any?> = ArrayList<Any?>()
            for (i in 0 until array.size()) {
                val element = array[i]
                // 解析 List 中的条目对象
                val item = context.deserialize<Any>(element, itemType)
                list.add(item)
            }
            list
        } else {
            // 类型不符，直接返回 null
            null
        }
    }
}